package com.xudu.tourbackend.controller;


import com.xudu.tourbackend.common.DeleteBatchRequest;
import com.xudu.tourbackend.common.Result;
import com.xudu.tourbackend.entity.Element;
import com.xudu.tourbackend.entity.request.AddElementRequest;
import com.xudu.tourbackend.entity.request.SearchElementRequest;
import com.xudu.tourbackend.entity.request.UpdateElementRequest;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author xudu
 * @since 2024-06-22
 */

@RequestMapping("/element")
public interface ElementController {

    /**
     * 添加元素。
     *
     * @param addElementRequest 包含新元素信息的请求对象。
     * @param request HTTP请求对象
     * @return 添加后的元素对象。
     */
    @PostMapping("addElement")
    Result addElement(AddElementRequest addElementRequest, HttpServletRequest request);

    /**
     * 更新元素信息。
     *
     * @param updateElementRequest 包含待更新元素信息的请求对象。
     * @param request HTTP请求对象
     * @return 更新后的元素对象。
     */
    @PostMapping("updateElement")
    Result updateElement(UpdateElementRequest updateElementRequest, HttpServletRequest request);

    /**
     * 批量删除元素。
     *
     * @param deleteBatchRequest 包含待删除元素ID列表的请求对象。
     * @param request HTTP请求对象
     * @return 被删除的元素数量。
     */
    @PostMapping("deleteElement")
    Result deleteElement(DeleteBatchRequest deleteBatchRequest, HttpServletRequest request);

    /**
     * 根据组合条件查询元素。
     *
     * @param searchElementRequest 待查询元素的查询条件。
     * @param request HTTP请求对象
     * @return 符合条件的元素对象。
     */
    @GetMapping("searchElement")
    Result searchElement(SearchElementRequest searchElementRequest, HttpServletRequest request);

    /**
     * 根据名称查询元素。
     *
     * @param elementName 待查询元素的名称。
     * @param request HTTP请求对象
     * @return 符合条件的元素列表。
     */
    @GetMapping("searchElementByName")
    List<Element> searchElementByName(String elementName, HttpServletRequest request);

    /**
     * 根据标签ID查询元素。
     *
     * @param tagId 标签ID，用于查询与该标签关联的元素。
     * @return 符合条件的元素列表。
     */
    @GetMapping("searchElementByTag")
    List<Element> searchElementByTag(int tagId);

}
